When a software program is being created, a programmer typically writes source code at a level that may be read and understood by other humans. The source code is then fed to a compiler. The compiler transforms the source code into an executable file. The executable file is usually in a machine language that can not be easily understood by humans but that can be quickly digested by a processor of a computer. With a larger software program, several programmers may work together to create the code pieces that are used to ultimately produce the large software program. In more general terminology, the programmers create original files. The original files are then fed to a build system that manipulates them to produce build-result files or packages. These build-result packages are typically capable of being directly consumed by a processing device.
Programmers often provide bug fixes and security updates for programs, causing the build system to recreate relevant build-result packages. A program's source code can include portions applicable to specific versions of the program. For example, source code of an operating system can include portions applicable to operating system versions for different hardware platforms. The build system can use a single package containing source code of different operating system versions to create multiple build-result packages, with each build-result package corresponding to an operating system version operable with a distinct hardware platform. Combining the source code of different operating system versions into a single source code package significantly simplifies maintenance of source code packages. However, source code of functionally different programs is still maintained in separate packages even if these programs share a significant amount of source code. As a result, when fixes or updates are received for one program, they have to be propagated not only to this program but also to a program with which it has shared source code.